package org.dromara.system.service;

import org.dromara.system.domain.SysSequence;
import org.dromara.system.domain.vo.SysSequenceVo;
import org.dromara.system.domain.bo.SysSequenceBo;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;

import java.util.Collection;
import java.util.List;
import java.util.function.Function;

/**
 * 序号Service接口
 *
 * @author yilong.fu
 * @date 2023-05-19
 */
public interface ISysSequenceService {

    /**
     * 查询序号
     */
    SysSequenceVo getOne(SysSequenceBo bo);

    /**
     * 查询序号
     */
    SysSequenceVo getOne(SysSequenceBo bo, Function<LambdaQueryWrapper<SysSequence>, Boolean>
        func);

    /**
     * 查询序号
     */
    SysSequenceVo queryById(Long id);

    /**
     * 查询序号列表
     */
    TableDataInfo<SysSequenceVo> queryPageList(SysSequenceBo bo, PageQuery pageQuery);

    /**
     * 查询序号列表
     */
    TableDataInfo<SysSequenceVo> queryPageList(SysSequenceBo bo, PageQuery pageQuery,
                                               Function<LambdaQueryWrapper<SysSequence>, Boolean>
                                                   func);

    /**
     * 查询序号列表
     */
    List<SysSequenceVo> queryList(SysSequenceBo bo);

    /**
     * 查询序号列表
     */
    List<SysSequenceVo> queryList(SysSequenceBo bo,
                                  Function<LambdaQueryWrapper<SysSequence>, Boolean>
                                      func);

    /**
     * 新增序号
     */
    Boolean insertByBo(SysSequenceBo bo);

    /**
     * 修改序号
     */
    Boolean updateByBo(SysSequenceBo bo);

    /**
     * 校验并删除序号信息
     */
    Boolean deleteWithValidById(Long id, Boolean isValid);

    /**
     * 校验并批量删除序号信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    public String generateSequence(String seqName, String key, int number);

    public Long nextval(String seqName);
}
